home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2002 November / SGI IRIX Base Documentation 2002 November.iso / usr / share / catman / u_man / cat1 / gmemusage.z / gmemusage
Encoding:
Text File  |  2002-10-03  |  23.3 KB  |  397 lines

  1.  
  2.  
  3.  
  4. GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))                                                      GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      gmemusage - graphical memory usage viewer
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      ggggmmmmeeeemmmmuuuussssaaaaggggeeee [ ----iiii _i_n_t_e_r_v_a_l ]
  13.                [ ----mmmm | ----pppp | ----rrrr | ----ssss ] [ ----uuuu ]
  14.                [ ----aaaa _a_i_f_f-_f_i_l_e ] [ ----gggg _g_r_o_w_t_h-_t_h_r_e_s_h_o_l_d] [ ----yyyy ]
  15.                [ ----ffff _f_o_n_t ] [ ----vvvv ] [ ----nnnn ]
  16.                [ ----tttt _t_h_r_e_s_h ] [ ----dddd _d_e_l_t_a ]
  17.                [ _p_r_o_g_s ... ]
  18.  
  19. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  20.      _g_m_e_m_u_s_a_g_e is a graphical memory usage viewer.  _g_m_e_m_u_s_a_g_e displays a bar
  21.      chart depicting the breakdown of memory use, with each bar labeled with
  22.      the name of the program using the memory and the number of kilobytes of
  23.      memory used.  If more than one copy of a program is running, the number
  24.      of copies is displayed in parentheses after the program name.
  25.  
  26.      In addition, _g_m_e_m_u_s_a_g_e will display a breakdown of the regions within a
  27.      program.  Clicking on a bar or program name in the main chart will
  28.      replace the main chart with a chart for that program, with each region
  29.      labeled with one of TTTTeeeexxxxtttt, DDDDaaaattttaaaa, BBBBrrrreeeeaaaakkkk, SSSSttttaaaacccckkkk, SSSShhhhmmmmeeeemmmm, PPPPhhhhyyyyssssiiiiccccaaaallll DDDDeeeevvvviiiicccceeee, RRRRWWWW,
  30.      RRRROOOO, and (if possible) the base name of the file or device corresponding
  31.      to each region.  If gmemusage is unable to determine the base name of the
  32.      file or device for a region that does correspond to a file or device,
  33.      gmemusage will display the inode number of the file or device.
  34.  
  35.      The meanings of these labels are as follows:
  36.  
  37.      TTTTeeeexxxxtttt      This region contains executable instructions.  These
  38.                instructions most likely came from an executable program file
  39.                or a dynamic shared object.
  40.  
  41.      DDDDaaaattttaaaa      This region contains program data.  Regions marked DDDDaaaattttaaaa are
  42.                usually associated with a particular executable program file or
  43.                a dynamic shared object.
  44.  
  45.      BBBBrrrreeeeaaaakkkk     Data region that is grown with _b_r_k(2).  This is the region that
  46.                contains memory allocated by _m_a_l_l_o_c(3C).
  47.  
  48.      SSSSttttaaaacccckkkk     Runtime stack.  This is region is used for procedure call
  49.                frames, and can grow if the program makes deeply nested
  50.                procedure calls or calls procedures that allocate large amounts
  51.                of stack space for temporary variables.
  52.  
  53.      SSSShhhhmmmmeeeemmmm     A System V shared memory region.
  54.  
  55.      PPPPhhhhyyyyssssiiiiccccaaaallll DDDDeeeevvvviiiicccceeee
  56.                Region corresponds to a physical device other than main memory,
  57.                such as a graphics device.
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))                                                      GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))
  71.  
  72.  
  73.  
  74.      RRRRWWWW        Read/Write data without the Copy on Write bit set.  This did
  75.                not come from an executable program file or a dynamic shared
  76.                object, and could be a memory mapped file.
  77.  
  78.      RRRROOOO        Read only data.
  79.  
  80.      KKKKeeeerrrrnnnneeeellll SSSSttttaaaacccckkkk
  81.                Stack used to execute system calls in the kernel.
  82.  
  83.      PPPPTTTTEEEEssss      Page table entries.
  84.  
  85.      Clicking on the IIIIrrrriiiixxxx bar in PPPPhhhhyyyyssssiiiiccccaaaallll MMMMeeeemmmmoooorrrryyyy BBBBrrrreeeeaaaakkkkddddoooowwwwnnnn mode (see below)
  86.      causes _g_m_e_m_u_s_a_g_e to display a breakdown of the memory that it is charging
  87.      to the operating system.  Separate items include FFFFSSSS CCCCaaaacccchhhheeee, BBBBuuuuffffffffeeeerrrr DDDDaaaattttaaaa,
  88.      HHHHeeeeaaaapppp, SSSSttttrrrreeeeaaaammmmssss, ZZZZoooonnnneeee, BBBBSSSSDDDD NNNNeeeettttwwwwoooorrrrkkkkiiiinnnngggg, PPPPaaaaggggeeee FFFFrrrraaaammmmeeee DDDDaaaattttaaaa, KKKKeeeerrrrnnnneeeellll TTTTaaaabbbblllleeeessss, UUUUnnnniiiixxxx
  89.      DDDDaaaattttaaaa SSSSppppaaaacccceeee, UUUUnnnniiiixxxx CCCCooooddddeeee SSSSppppaaaacccceeee, SSSSyyyymmmmmmmmoooonnnn, and OOOOtttthhhheeeerrrr.
  90.  
  91.      When viewing the breakdown of program memory usage, clicking and dragging
  92.      on the shadow bar will switch the display to another program.
  93.  
  94.      The first time a program is clicked on, _g_m_e_m_u_s_a_g_e reads in information
  95.      about executables and libraries on the system while displaying a wait
  96.      message.  _g_m_e_m_u_s_a_g_e keeps this information in its database file
  97.      $_H_O_M_E/._g_m_e_m_u_s_a_g_e._i_n_o_d_e_s.  if this file does not exist or is older than
  98.      /_u_n_i_x, _g_m_e_m_u_s_a_g_e will create it, which can take as long as a minute.  If
  99.      the database already exists and is newer than /_u_n_i_x, reading it will only
  100.      take a few seconds.  See EEEENNNNVVVVIIIIRRRROOOONNNNMMMMEEEENNNNTTTT VVVVAAAARRRRIIIIAAAABBBBLLLLEEEESSSS below for information on
  101.      customizing $_H_O_M_E/._g_m_e_m_u_s_a_g_e._i_n_o_d_e_s.
  102.  
  103.      _g_m_e_m_u_s_a_g_e has four different modes of viewing.  The default mode,
  104.      PPPPhhhhyyyyssssiiiiccccaaaallll MMMMeeeemmmmoooorrrryyyy BBBBrrrreeeeaaaakkkkddddoooowwwwnnnn, shows the amount of physical memory being used
  105.      by each process, the amount of free memory, and the amount of memory
  106.      being used by Irix.  The amount of memory charged to each process is
  107.      calculated by taking the pages each process has in memory and pro-rating
  108.      the sizes with the number of processes using each page.
  109.  
  110.      The mode TTTToooottttaaaallll SSSSiiiizzzzeeeessss ooooffff PPPPrrrroooocccceeeessssssss shows the total sizes of all the
  111.      processes in the system.  This corresponds to the _S_Z field of _p_s(1)
  112.      output.
  113.  
  114.      The mode RRRReeeessssiiiiddddeeeennnntttt SSSSiiiizzzzeeeessss ooooffff PPPPrrrroooocccceeeesssssssseeeessss shows the resident sizes of all the
  115.      processes in the system.  This corresponds to the _R_S_S field of _p_s(1)
  116.      output.
  117.  
  118.      The mode RRRReeeessssiiiiddddeeeennnntttt MMMMaaaappppppppiiiinnnnggggssss shows the resident sizes of all mapped objects
  119.      in the system.  A mapped object can correspond to an executable file, a
  120.      dynamic shared object, a memory mapped file, or a region attached to a
  121.      process by _r_l_d(1).
  122.  
  123.      By default, _g_m_e_m_u_s_a_g_e only displays programs that are using more than 500
  124.      kilobytes of memory; programs using less than this are lumped together
  125.      and labeled <<<< 555500000000.  This threshold is specifiable on the command line and
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))                                                      GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))
  137.  
  138.  
  139.  
  140.      changeable at run time.
  141.  
  142.      Alternatively, a list of programs to monitor can be specified on the
  143.      command line (see below).  In this case, a bar for each of the programs
  144.      specified appears (as long as that program is running) and any threshold
  145.      is ignored.
  146.  
  147.      In addition to the four basic viewing modes and the process region
  148.      breakdown, _g_m_e_m_u_s_a_g_e cycles through displays of additional information
  149.      when the 'v' key is pressed.  This additional information is a
  150.      subdivision of each bar in the chart, with the right portion of each bar
  151.      corresponding to the additional information.  Down the right side of the
  152.      window the values corresponding to the right portion of each bar are
  153.      displayed.
  154.  
  155.      The following additional information is available:
  156.  
  157.      PPPPrrrriiiivvvvaaaatttteeee   The portion of each bar that is private memory; that is, memory
  158.                which is not being shared.  This additional information is
  159.                available in all modes, except when viewing the Irix breakdown.
  160.  
  161.      SSSShhhhaaaarrrreeeedddd    The portion of each bar that is shared between more than one
  162.                process.  This is calculated by subtracting the PPPPrrrriiiivvvvaaaatttteeee amount
  163.                from the PPPPhhhhyyyyssssiiiiccccaaaallll amount for each bar.  SSSShhhhaaaarrrreeeedddd is available in
  164.                all modes, except when viewing the Irix breakdown.
  165.  
  166.      PPPPhhhhyyyyssssiiiiccccaaaallll  The portion of each bar that is consuming physical memory.
  167.                PPPPhhhhyyyyssssiiiiccccaaaallll is available in RRRReeeessssiiiiddddeeeennnntttt SSSSiiiizzzzeeeessss ooooffff PPPPrrrroooocccceeeesssssssseeeessss and TTTToooottttaaaallll
  168.                SSSSiiiizzzzeeeessss ooooffff PPPPrrrroooocccceeeesssssssseeeessss modes.
  169.  
  170.      RRRReeeessssiiiiddddeeeennnntttt  The portion of each bar that is resident in memory (without
  171.                taking sharing into account).  RRRReeeessssiiiiddddeeeennnntttt is available in TTTToooottttaaaallll
  172.                SSSSiiiizzzzeeeessss ooooffff PPPPrrrroooocccceeeesssssssseeeessss mode.
  173.  
  174.      If the environment variable GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEESSSSOOOOUUUUNNNNDDDD is set to a valid aiff file,
  175.      and _p_l_a_y_a_i_f_f(1) is installed, _g_m_e_m_u_s_a_g_e will use _p_l_a_y_a_i_f_f(1) to play
  176.      $$$$GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEESSSSOOOOUUUUNNNNDDDD when viewing a program's region breakdown and the program
  177.      grows by a thresholded amount.  The command line option ----aaaa can be used as
  178.      an alternative to the environment for specifying a sound file, and the
  179.      growth threshold can be specified on the command line (see below).
  180.  
  181.      _g_m_e_m_u_s_a_g_e has the following command line options:
  182.  
  183.      ----iiii _i_n_t_e_r_v_a_l
  184.                Update display every _i_n_t_e_r_v_a_l milliseconds.  The default in the
  185.                absence of the ----iiii option is 1000.
  186.  
  187.      ----mmmm        Start using RRRReeeessssiiiiddddeeeennnntttt MMMMaaaappppppppiiiinnnnggggssss mode.
  188.  
  189.      ----pppp        Start using PPPPhhhhyyyyssssiiiiccccaaaallll MMMMeeeemmmmoooorrrryyyy BBBBrrrreeeeaaaakkkkddddoooowwwwnnnn mode.  This is the
  190.                default.
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))                                                      GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))
  203.  
  204.  
  205.  
  206.      ----rrrr        Start using RRRReeeessssiiiiddddeeeennnntttt SSSSiiiizzzzeeeessss ooooffff PPPPrrrroooocccceeeesssssssseeeessss mode.
  207.  
  208.      ----ssss        Start using TTTToooottttaaaallll SSSSiiiizzzzeeeessss ooooffff PPPPrrrroooocccceeeesssssssseeeessss mode.
  209.  
  210.      ----uuuu        Rebuild the inode database $_H_O_M_E/._g_m_e_m_u_s_a_g_e._i_n_o_d_e_s even if it
  211.                isn't older than /_u_n_i_x (see FFFFIIIILLLLEEEESSSS below).
  212.  
  213.      ----tttt _t_h_r_e_s_h Use tttthhhhrrrreeeesssshhhh kilobytes instead of 500 kilobytes as the starting
  214.                threshold.  Programs using less than this amount of memory in a
  215.                particular view are not displayed separately, but rather are
  216.                lumped together in a single bar.
  217.  
  218.      ----dddd _d_e_l_t_a  Change the threshold by _d_e_l_t_a kilobytes when the up and down
  219.                arrow keys are pressed (see below).  The default is to change
  220.                the threshold by 50 kilobytes.
  221.  
  222.      ----aaaa _a_i_f_f-_f_i_l_e
  223.                Specify an aiff sound file to be played when viewing a
  224.                program's region breakdown and the program grows by more than a
  225.                threshold amount (see ----gggg option).
  226.  
  227.      ----gggg _g_r_o_w_t_h-_t_h_r_e_s_h_o_l_d
  228.                Specify in kilobytes the growth threshold.  This is the amount
  229.                a program has to grow before _g_m_e_m_u_s_a_g_e will play a sound.  The
  230.                default is 12.
  231.  
  232.      ----yyyy        Causes gmemusage to print usage information to stdout each
  233.                interval in addition to updating its graphical display.
  234.  
  235.      ----ffff _f_o_n_t   Specifies the font for drawing text.
  236.  
  237.      ----vvvv        Causes gmemusage to use the default visual.  By default
  238.                gmemusage will attempt to use a double-buffered TrueColor
  239.                visual.
  240.  
  241.      ----nnnn        Turns off double-buffering.
  242.  
  243.      pppprrrrooooggggssss     Any command line arguments following the arguments described
  244.                above are interpreted as names of programs.  If program names
  245.                are specified, _g_m_e_m_u_s_a_g_e only displays the memory usage of the
  246.                programs specified, with all other programs lumped together in
  247.                a bar labeled OOOOtttthhhheeeerrrr.  In this case, any threshold or delta is
  248.                ignored.  This is useful when one is interested in the behavior
  249.                of a particular program or set of programs, such as when
  250.                testing for memory leaks.
  251.  
  252.    RRRRuuuunnnnttttiiiimmmmeeee ccccoooonnnnttttrrrroooollllssss
  253.      Some of _g_m_e_m_u_s_a_g_e's display parameters can be modified at runtime.
  254.      Pressing the 'p' key selects PPPPhhhhyyyyssssiiiiccccaaaallll MMMMeeeemmmmoooorrrryyyy BBBBrrrreeeeaaaakkkkddddoooowwwwnnnn mode.  Pressing
  255.      the 'r' key selects RRRReeeessssiiiiddddeeeennnntttt SSSSiiiizzzzeeeessss ooooffff PPPPrrrroooocccceeeesssssssseeeessss mode.  Pressing the 's'
  256.      key selects TTTToooottttaaaallll SSSSiiiizzzzeeeessss ooooffff PPPPrrrroooocccceeeesssssssseeeessss mode.
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))                                                      GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))
  269.  
  270.  
  271.  
  272.      Pressing the 'v' key cycles through the available additional information
  273.      for the current mode (see above discussion of additional information).
  274.  
  275.      The up arrow key increases the threshold by 50 kilobytes (default) or, if
  276.      the ----dddd option was specified, by _d_e_l_t_a kilobytes.  The down arrow key
  277.      decreases the threshold by the same amount.  When the threshold is
  278.      decreased to 0, all programs running are displayed, even those that use
  279.      no memory (such as kernel processes).
  280.  
  281.      In the main view, clicking on a program's bar causes _g_m_e_m_u_s_a_g_e to display
  282.      a detailed memory usage chart for that program.  In the detailed usage
  283.      view, clicking on the shadow bar switches the program being displayed,
  284.      and clicking outside the shadow bar or pressing the space bar returns to
  285.      the main view.
  286.  
  287.      In any of the detailed usage views (except RRRReeeessssiiiiddddeeeennnntttt MMMMaaaappppppppiiiinnnnggggssss), pressing
  288.      the PPPPaaaaggggeeee DDDDoooowwwwnnnn and PPPPaaaaggggeeee UUUUpppp keys navigates you through the processes that
  289.      have been combined under a single program name.  For example, if you have
  290.      four _x_w_s_h processes running, this enables you to see individual memory
  291.      usage for each _x_w_s_h process.
  292.  
  293.      At any time, pressing the 't' key causes _g_m_e_m_u_s_a_g_e to print statistics
  294.      about the current view to the terminal window.  The fields in each line
  295.      are separated by tab characters to simplify the parsing of the output by
  296.      other programs (they are also padded with spaces).  There are three
  297.      different types of print outs: AAAAllllllll PPPPrrrrooooggggrrrraaaammmmssss, RRRReeeessssiiiiddddeeeennnntttt MMMMaaaappppppppiiiinnnnggggssss, and
  298.      program breakdown.  Which gets printed depends on the mode _g_m_e_m_u_s_a_g_e is
  299.      in when 't' is pressed.
  300.  
  301.      The 'h' key brings up an on-line help screen, and the space bar returns
  302.      from there to viewing memory.  The escape key exits.
  303.  
  304. EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS
  305.           gmemusage -p -t 1000 -d 100
  306.  
  307.  
  308.      Bring up _g_m_e_m_u_s_a_g_e in PPPPhhhhyyyyssssiiiiccccaaaallll MMMMeeeemmmmoooorrrryyyy BBBBrrrreeeeaaaakkkkddddoooowwwwnnnn mode, with programs using
  309.      1000 kilobytes or more of memory displayed separately in their own bars.
  310.      The up and down arrow keys will increase and decrease the threshold by
  311.      100 kilobytes respectively.
  312.  
  313.           gmemusage -r xwsh toolchest 4Dwm Xsgi fm
  314.  
  315.  
  316.      Bring up _g_m_e_m_u_s_a_g_e in RRRReeeessssiiiiddddeeeennnntttt SSSSiiiizzzzeeeessss ooooffff PPPPrrrroooocccceeeesssssssseeeessss mode.  Display bars for
  317.      _x_w_s_h(1), _t_o_o_l_c_h_e_s_t(1), _4_D_w_m(1), _X_s_g_i(1), and _f_m(1).  All other programs
  318.      will be combined into a bar labeled OOOOtttthhhheeeerrrr.
  319.  
  320. FFFFIIIILLLLEEEESSSS
  321.      $HOME/.gmemusage.inodes    Table of files that are likely to correspond
  322.                                 to regions mapped into processes, along with
  323.                                 inode numbers.  _g_m_e_m_u_s_a_g_e builds this table if
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))                                                      GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEE((((1111))))
  335.  
  336.  
  337.  
  338.                                 it doesn't exist or if it is older than /_u_n_i_x
  339.                                 or if the ----uuuu option is supplied, and uses it
  340.                                 to label the bars when viewing memory
  341.                                 breakdown within a process.  See EEEENNNNVVVVIIIIRRRROOOONNNNMMMMEEEENNNNTTTT
  342.                                 VVVVAAAARRRRIIIIAAAABBBBLLLLEEEESSSS below for information on altering
  343.                                 how $_H_O_M_E/._g_m_e_m_u_s_a_g_e._i_n_o_d_e_s is built.
  344.  
  345.      /proc                      _g_m_e_m_u_s_a_g_e gets memory usage information for
  346.                                 processes from the /_p_r_o_c file system.
  347.  
  348. EEEENNNNVVVVIIIIRRRROOOONNNNMMMMEEEENNNNTTTT VVVVAAAARRRRIIIIAAAABBBBLLLLEEEESSSS
  349.      GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEESSSSOOOOUUUUNNNNDDDD    If set, $$$$GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEESSSSOOOOUUUUNNNNDDDD is used as an aiff file to be
  350.                        played by _p_l_a_y_a_i_f_f(1) when viewing a process's region
  351.                        breakdown and the process grows (see above).
  352.  
  353.      GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEEPPPPAAAATTTTHHHH     Colon separated list of directories to recursively
  354.                        search when building the inode database,
  355.                        $_H_O_M_E/._g_m_e_m_u_s_a_g_e._i_n_o_d_e_s.  If GGGGMMMMEEEEMMMMUUUUSSSSAAAAGGGGEEEEPPPPAAAATTTTHHHH is not found
  356.                        in the environment, _g_m_e_m_u_s_a_g_e uses the following
  357.                        default path:
  358.  
  359.           /usr/lib:/usr/lib32:/usr/lib64:
  360.           /usr/local:/usr/sysadm:/var/ns/lib:
  361.           /lib:/lib32:/lib64:/usr/gfx
  362.  
  363.  
  364. BBBBUUUUGGGGSSSS
  365.      The totals displayed for the breakdown of a program's regions do not
  366.      always add up exactly to the amount of memory in the main view.  In
  367.      PPPPhhhhyyyyssssiiiiccccaaaallll MMMMeeeemmmmoooorrrryyyy mode, this discrepancy is due to rounding error.  In
  368.      TTTToooottttaaaallll SSSSiiiizzzzeeee mode, this is often due to the inclusion of physical devices
  369.      in the breakdown.  The RRRReeeessssiiiiddddeeeennnntttt SSSSiiiizzzzeeee discrepancies are currently being
  370.      studied.
  371.  
  372. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  373.      _p_s(1), _t_o_p(1), _g_r__t_o_p, _o_s_v_i_e_w(_1), _g_r__o_s_v_i_e_w(_1), _p_r_o_c(_4).
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.